<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

</head>

<body id="fanhui">
    <table align="center" border="1" cellspacing="0" cellpadding="5px">
        <tr>
            <td><a href="#program1">程序一</a></td>
            <td><a href="#program2">程序二</a></td>
            <td><a href="#program3">程序三</a></td>
        </tr>

    </table>
    <p id="program1">程序1:</p>

    编一个程序,实现简单的字处理程序功能---光标可以上下左右移动，可一写字符，删字符。

    DATA SEGMENT<br>



    DATA ENDS<br>

    CODE SEGMENT<br>

    ASSUME CS:CODE,DS:DATA<br>

    START: MOV AX,DATA<br>

    MOV DS,AX<br>

    MOV AH,0<br>

    MOV AL,03H<br>

    INT 10H<br>

    MOV BH,0<br>

    MOV DH,10<br>

    MOV DL,10<br>

    MOV AH,2<br>

    INT 10H ;把光标设置在中央,可以不要这几句,主要是让你看得方便<br>

    TOP: MOV AH,0<br>

    INT 16H<br>

    DOWN :CMP AH,50H ;下<br>

    JNZ RIGHT<br>

    MOV AH,3<br>

    MOV BH,0<br>

    INT 10H<br>

    INC DH<br>

    MOV AH,2<br>

    INT 10H<br>

    JMP NEXT<br>

    RIGHT: CMP AH,4DH ;右<br>

    JNZ UP<br>

    MOV AH,3<br>

    MOV BH,0<br>

    INT 10H<br>

    CMP DL,79 ;判断是不是到了最后一列<br>

    JZ NEXT1 ；是，转<br>

    INC DL ；不是最后，列号加1<br>

    DONE:MOV AH,2<br>

    INT 10H<br>

    JMP NEXT<br>

    NEXT1:INC DH ；如果是最后一列，则光标转到下一行的第一列<br>

    MOV DL,0<br>

    JMP DONE<br>

    UP: CMP AH,48H ;上<br>

    JNZ LEFT<br>

    MOV AH,3<br>

    MOV BH,0<br>

    INT 10H<br>

    CMP DH,1<br>

    JZ NEXT<br>

    DEC DH<br>

    MOV AH,2<br>

    INT 10H<br>

    JMP NEXT<br>

    LEFT: CMP AH,4BH ;左<br>

    JNZ ESC1<br>

    MOV AH,3<br>

    MOV BH,0<br>

    INT 10H<br>

    CMP DL,1 ；判断是不是第一列<br>

    JZ NEXT2 ；是，转<br>

    DEC DL ；不是，列号减1<br>

    D: MOV AH,2
    <br>
    INT 10H

    JMP NEXT

    NEXT2: CMP DH,1 ；是第一列，再判断是不是第一行的第一列

    JNZ DDD ；如果不是，转DDD

    JMP NEXT ；如果是，说明当前光标位于第一行，第一列，所以光标不动，继续循环！

    DDD: DEC DH

    MOV DL,79

    JMP D

    ESC1: CMP AL,1BH ;退出

    JNZ BACK

    JMP EXIT

    BACK: CMP AL,08H ;back键

    JNZ ENTER

    MOV DL,AL

    MOV AH,2

    INT 21H

    MOV DL,20H

    MOV AH,2

    INT 21H

    MOV AH,3

    MOV BH,0

    INT 10H

    DEC DL

    MOV AH,2

    INT 10H

    JMP NEXT

    ENTER:CMP AL,0DH ；ENTER键

    JNZ DEFAULT

    MOV AH,3

    MOV BH,0

    INT 10H

    INC DH ；若是回车键，则转道下一行（INC DH）的第一列（MOV DL，0）

    MOV DL,0

    MOV AH,2

    INT 10H

    JMP NEXT

    DEFAULT: MOV DL,AL ;其它键

    MOV AH,2

    INT 21H

    NEXT: JMP TOP

    EXIT: MOV AH,4CH

    INT 21H

    CODE ENDS

    END START


    <p id="program2">程序2</p>
    从键盘上获得若干个十进制数，求他们的平均值，并输出到屏幕上



    .从键盘上输入若干个十进制数，并计算它们的平均值，并在屏幕上显示这个平均值



    DATA SEGMENT

    INPUT DB 4

    DB ?

    DB 4 DUP (?)

    DB '$'

    NUM DW 20 DUP(?)

    AVE DB ?

    OUTPUT1 DB 'INPUT A NUMBER',0DH,0AH,'$'

    OUTPUT2 DB 'INPUT AGAIN(END WITH #)',0DH,0AH,'$'

    OUTPUT3 DB 'AVERAGE IS:','$'

    DATA ENDS

    ;----------------

    CODE SEGMENT

    ASSUME CS:CODE,DS:DATA

    MAIN PROC FAR

    PUSH DS

    XOR AX,AX

    PUSH AX

    MOV AX,DATA

    MOV DS,AX

    START:MOV DX,OFFSET OUTPUT1

    MOV AH,9

    INT 21H

    MOV BL, 0

    MOV DI,OFFSET NUM

    MOV DX,OFFSET INPUT

    MOV AH,0AH

    INT 21H

    MOV DX,OFFSET INPUT+2

    MOV AH,9

    INT 21H

    MOV SI,OFFSET INPUT+1

    MOV CL,[SI]

    INC SI

    MOV CH,0

    CALL ADECXB

    MOV [DI],AX

    INC BL

    INC DI

    INC DI

    INN: MOV DX,OFFSET OUTPUT2

    MOV AH,9

    INT 21H

    MOV DX,OFFSET INPUT

    MOV AH,0AH

    INT 21H

    MOV SI,OFFSET INPUT+1

    MOV CL,[SI]

    INC SI

    CMP BYTE PTR [SI],'#'

    JZ DONE

    MOV CH, 0

    CALL ADECXB

    MOV [DI],AX

    INC BL

    INC DI

    INC DI

    JMP INN

    DONE: MOV DX, 0<br>

    PUSH BX<br>

    MOV DI,OFFSET NUM<br>

    R: MOV AX,[DI]<br>

    ADD DX,AX<br>

    INC DI<br>

    INC DI

    DEC BL<br>

    CMP BL,0<br>

    JNZ R<br>

    MOV AX,DX<br>

    MOV DX,OFFSET OUTPUT3<br>

    PUSH AX

    MOV AH,9

    INT 21H

    POP AX

    POP BX

    DIV BL

    MOV AH,0

    MOV BL,100

    DIV BL

    MOV BH,AL

    ADD BH,30H

    MOV DL,BH

    PUSH AX

    MOV AH,2<br>

    INT 21H<br>

    POP AX<br>

    MOV AL,AH<br>
    <br>

    MOV BL,10<br>

    DIV BL<br>

    ADD AL,30H<br>

    MOV DL,AL<br>

    PUSH AX

    MOV AH,2

    INT 21H

    POP AX

    ADD AH,30H

    MOV DL,AH<br>

    MOV AH,2<br>

    INT 21H

    RET

    MAIN ENDP

    ;-------------

    ADECXB PROC

    PUSH BX

    PUSH CX

    PUSH DX

    PUSH SI

    MOV BH,0

    XOR AX,AX

    AGAIN:ADD AX,AX<br>

    MOV DX,AX<br>

    ADD AX,AX<br>

    ADD AX,AX<br>

    ADD AX,DX<br>

    MOV BL,[SI]<br>

    AND BL,0FH<br>

    ADD AX,BX<br>

    INC SI<br>

    LOOP AGAIN<br>

    POP SI<br>

    POP DX<br>

    POP CX
    加载更多




    <p id="program3">程序3</p>
    例如：:功能:将内存中由SOURCE指示的个字节有符号数组成的数组分成正数和负数两个数组，并求这两个数
    组的数据个数，结果存放在RESULT指示的内存区域。存放形式为正数个数在前，其后跟正数组元素，然后是负数个数及负数数组元素。
    内存中有 1EH，91H，74H，91H，42H，30H，81H，F3H，18H，25H
    结果为 06H，1EH，74H，42H，30H，18H，25H，04H，91H，91H，81H，F3H

    DATA SEGMENT
    SOURCE DB 1EH,91H,74H,91H,42H,30H,81H,0F3H,18H,25H
    COUNT EQU $-SOURCE
    CNT EQU COUNT+1 ;CNT是一个常量，后面要用
    RESULT DB COUNT+2 DUP (?)
    DATA ENDS

    ;----------------------------------------------------
    CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
    MAIN PROC FAR
    PUSH DS
    XOR AX,AX
    PUSH AX
    MOV AX,DATA
    MOV DS,AX
    START: MOV SI,OFFSET SOURCE
    MOV DI,OFFSET RESULT
    MOV CX,COUNT
    MOV DL,0 ；正数计数器
    MOV DH,0 ；负数计数器
    MOV BX,OFFSET RESULT+CNT ；(此处用到了CNT)将指针知道RESULT最后
    REPEAT: MOV AL,[SI] ；取数比较
    CMP AL,0
    JG LOP
    INC DH ；小于零，DH加1
    MOV [BX],AL ；负数从后往前存放
    DEC BX
    JMP DONE
    LOP : INC DL ；正数DL加1
    MOV [DI+1],AL ；正数从前往后存放
    INC DI
    DONE: INC SI
    LOOP REPEAT
    MOV [BX],DH
    MOV DI,OFFSET RESULT
    MOV [DI],DL
    RET
    MAIN ENDP
    CODE ENDS
    END MAIN

    说明：1.此程序已调试通过
    2.本程序的思路为：正数从前（RESULT的第2的单元）往后存放，负数从后往前存放，所以本体的结果如下：
    RESULT: 06H，1EH，74H，42H，30H，18H，25H，04H，F3H,81H,91H,91H
    <h3><a href="#fanhui">返回</a></h3>
</body>

</html>